# -*- coding: utf-8 -*-
"""
    xfree.forum.utils
    ~~~~~~~~~~~~~~~~~~~~~
    文件描述：xfree论坛模块专用的工具类
    作者：xfree
    邮箱：cy_83k@qq.com
"""

from flask import current_app
from flask_login import current_user

from .locals import current_forum


def force_login_if_needed():
    """
     如果当前用户未认证且当前论坛不允许访客用户，则强制用户登录
    """
    # 判断当前论坛是否存在，并且是否需要强制登录
    if current_forum and should_force_login(current_user, current_forum):
        # 如果需要强制登录，返回未授权的响应，这通常会触发登录流程
        return current_app.login_manager.unauthorized()


def should_force_login(user, forum):
    """
     如果当前用户未认证且当前论坛不允许访客用户，则强制用户登录
     判断是否需要强制用户登录
    :param user: 当前用户对象
    :param forum: 当前论坛对象
    :return: 如果用户未认证且用户所属组与论坛所属组没有交集，则返回True，表示需要强制登录；否则返回False
    """
    return not user.is_authenticated and not (
        {g.id for g in forum.groups} & {g.id for g in user.groups}
    )
